#include <iostream>
#include <vector>
#include <string>

// 聚合类型：结构体
struct Point {
    int x;
    int y;
};

// 非聚合类型：类定义
class Circle {
public:
    double radius;
    Circle(double r) : radius(r) {}  // 自定义构造函数
};
// C++17 聚合类型可以有基类（此特性需要编译器支持 C++20 的完整实现，部分编译器可能仅在 C++20 模式下支持）
struct Base {
    int baseValue;
};

// 聚合类型
struct Derived : public Base { // C++17 允许聚合类型有公有基类
    int x;
    double y;
};



int main() {
    // 聚合类型的列表初始化
    Point p {10, 20};
    std::cout << "Point: (" << p.x << ", " << p.y << ")" << std::endl;
    // C++17 聚合初始化，包括基类成员
    Derived d = {{1}, 2, 3.5};
    std::cout << "Derived: baseValue(" << d.baseValue << "), x(" << d.x << "), y(" << d.y << ")" << std::endl;

    // 非聚合类型的列表初始化
    Circle c {5.0};
    std::cout << "Circle radius: " << c.radius << std::endl;

    // 容器的列表初始化
    std::vector<std::string> names {"Alice", "Bob", "Charlie"};
    std::cout << "Names:";
    for (const auto& name : names) {
        std::cout << " " << name;
    }
    std::cout << std::endl;

    return 0;
}